package pare.servidor.so;

import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;
import java.util.List;

import pare.common.so.SO_IServidorRMI;
import pare.common.so.SO_RemoteObserver;
//import pare.servidor.rn.RN_Sala;
import pare.servidor.rn.RN_Servidor;

public class SO_ServidorRMI extends SO_RemoteSubjectImpl implements
		SO_IServidorRMI {

	List<String> listaEspera = new ArrayList<String>();
	
	public SO_ServidorRMI() throws RemoteException {
		//
	}
	
	public void iniciaServidor(){
		try {
			Registry registro = LocateRegistry.getRegistry();
			registro.bind("servidorJogo", new SO_ServidorRMI());
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.setSecurityManager(new RMISecurityManager());
	}
	
	public void finalizaServidor(){
		//
	}

	public void conectaJogador(String jogador, SO_RemoteObserver observer) throws RemoteException {
		RN_Servidor.getInstance().setServidorRMI(this);
		RN_Servidor.getInstance().conectaJogador(jogador, observer);
	}
	
	public List<String> getListaEspera() {
		this.listaEspera = RN_Servidor.getInstance().getListaEspera();
		return this.listaEspera;
	}

	public List<SO_RemoteObserver> getListaCliente() throws RemoteException {
		return RN_Servidor.getInstance().getListaCliente();
	}

	public void desconectaJogador(String jogador, SO_RemoteObserver observer) {
		try {
			RN_Servidor.getInstance().setServidorRMI(this);
			RN_Servidor.getInstance().desconectaJogador(jogador, observer);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public List<String> getTodosJogadores() throws RemoteException {
		return RN_Servidor.getInstance().getTodosJogadores();
	}
	
	/*
	public void removeJogadorEspera(String jogador) throws RemoteException{
		listaEspera.remove(listaEspera.equals(jogador));
		this.notificaObservadores("atualizaEspera");
	}*/	
}
